package cn.wolfcode.business.domain;

import cn.wolfcode.common.annotation.Excel;
import cn.wolfcode.common.core.domain.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import java.util.Date;

/**
 * 汽车养修预约信息实体类
 * 这个类用来存储客户预约汽车养修/保养的所有信息
 * 对应数据库中的 bus_appointment 表
 * 
 * @author lyh
 * @date 2025-09-18
 */
@Getter
@Setter
public class BusAppointment extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    // 预约状态常量定义 - 用数字代表不同的预约状态
    public static final Integer STATUS_BOOKING = 0;           // 预约中 - 客户刚预约，还没到店
    public static final Integer STATUS_ARRIVED = 1;           // 已到店 - 客户已经到达店铺
    public static final Integer STATUS_USER_CANCELLED = 2;    // 用户取消 - 客户主动取消预约
    public static final Integer STATUS_TIMEOUT_CANCELLED = 3; // 超时取消 - 预约时间过了，自动取消
    public static final Integer STATUS_SETTLED = 4;           // 结算单生成 - 服务完成，生成了账单
    public static final Integer STATUS_PAID = 5;              // 支付完成 - 客户已经付款

    /** 主键ID - 每个预约记录的唯一标识 */
    private Long id;

    /** 客户姓名 - 预约客户的真实姓名 */
    @Excel(name = "客户名称")  // Excel导出时的列名
    private String customerName;

    /** 客户联系电话 - 用于联系客户 */
    @Excel(name = "客户联系方式")
    private String customerPhone;

    /** 预约时间 - 客户希望来店的时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")  // JSON格式化，前端显示时间格式
    @Excel(name = "预约时间", width = 30, dateFormat = "yyyy-MM-dd ")
    private Date appointmentTime;

    /** 实际到店时间 - 客户真正到达店铺的时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "实际到店时间", width = 30, dateFormat = "yyyy-MM-dd ")
    private Date actualArrivalTime;

    /** 车牌号码 - 客户车辆的车牌号 */
    @Excel(name = "车牌号码")
    private String licensePlate;

    /** 汽车型号 - 客户车辆的品牌和型号，如"奔驰C200" */
    @Excel(name = "汽车类型")
    private String carSeries;

    /** 服务类型 - 0表示维修，1表示保养 */
    @Excel(name = "服务类型【维修0/保养1】")
    private Integer serviceType;

    /** 备注信息 - 客户的特殊要求或问题描述 */
    @Excel(name = "备注信息")
    private String info;

    /** 预约状态 - 使用上面定义的常量值 */
    @Excel(name = "状态【预约中0/已到店1/用户取消2/超时取消3/已结算4/已支付5】")
    private Integer status;


}
